// 服务器配置 - 统一管理所有URL和域名
const serverConfig = {
  // 开发环境配置
  development: {
    // 服务器域名/IP列表（按优先级排序）
    hosts: [
      "127.0.0.1", // 本地Docker服务（优先）
      "localhost", // 本地服务备用
    ],
    // 端口
    port: "8080", // 本地开发端口
    // 协议
    protocol: "http", // 本地开发使用HTTP
    // 是否使用HTTPS
    useHttps: false,
  },

  // 生产环境配置
  production: {
    // 生产环境域名
    hosts: [
      "jianianhua.asia", // 生产域名
      "81.68.73.173", // 云服务器IP（备用）
    ],
    // 端口
    port: "", // 使用默认端口
    // 协议
    protocol: "https",
    // 是否使用HTTPS
    useHttps: true,
  },
};

// 获取当前环境
function getCurrentEnv() {
	// 从本地存储读取环境配置，如果没有则默认使用生产环境
	try {
		if (typeof wx !== "undefined") {
			const env = wx.getStorageSync("app_env") || "production";
			return env;
		}
	} catch (e) {
		console.error("获取环境配置失败:", e);
	}
	// 默认使用生产环境
	return "production";
}

// 获取当前环境配置
function getCurrentConfig() {
  const env = getCurrentEnv();
  return serverConfig[env];
}

// 构建基础URL
function buildBaseURL(host, port, protocol) {
  let url = `${protocol}://${host}`;
  if (port && port !== "") {
    url += `:${port}`;
  }
  return url;
}

// 获取API基础地址
function getAPIBaseURL() {
  const config = getCurrentConfig();

  let selectedHost;

  // 检查是否在微信小程序环境中
  if (typeof wx !== "undefined" && wx.getDeviceInfo) {
    try {
      const deviceInfo = wx.getDeviceInfo();
      // 如果是开发者工具，优先使用本地IP
      if (deviceInfo.platform === "devtools") {
        selectedHost =
          config.hosts.find((host) => host === "127.0.0.1") || config.hosts[0];
      } else {
        // 手机端使用第一个可用的IP
        selectedHost = config.hosts[0];
      }
    } catch (e) {
      // 如果获取失败，使用第一个可用的IP
      selectedHost = config.hosts[0];
    }
  } else {
    // 非微信小程序环境，使用第一个可用的IP
    selectedHost = config.hosts[0];
  }

  return buildBaseURL(selectedHost, config.port, config.protocol) + "/api/v1";
}

// 获取图片服务器地址
function getImageServerURL() {
  const config = getCurrentConfig();

  let selectedHost;

  // 检查是否在微信小程序环境中
  if (typeof wx !== "undefined" && wx.getDeviceInfo) {
    try {
      const deviceInfo = wx.getDeviceInfo();
      // 如果是开发者工具，优先使用本地IP
      if (deviceInfo.platform === "devtools") {
        selectedHost =
          config.hosts.find((host) => host === "127.0.0.1") || config.hosts[0];
      } else {
        // 手机端使用第一个可用的IP
        selectedHost = config.hosts[0];
      }
    } catch (e) {
      // 如果获取失败，使用第一个可用的IP
      selectedHost = config.hosts[0];
    }
  } else {
    // 非微信小程序环境，使用第一个可用的IP
    selectedHost = config.hosts[0];
  }

  return buildBaseURL(selectedHost, config.port, config.protocol);
}

// 获取WebSocket地址
function getWebSocketURL() {
  const config = getCurrentConfig();

  let selectedHost;

  // 检查是否在微信小程序环境中
  if (typeof wx !== "undefined" && wx.getDeviceInfo) {
    try {
      const deviceInfo = wx.getDeviceInfo();
      if (deviceInfo.platform === "devtools") {
        selectedHost =
          config.hosts.find((host) => host === "127.0.0.1") || config.hosts[0];
      } else {
        selectedHost = config.hosts[0];
      }
    } catch (e) {
      selectedHost = config.hosts[0];
    }
  } else {
    selectedHost = config.hosts[0];
  }

  const protocol = config.useHttps ? "wss" : "ws";
  return buildBaseURL(selectedHost, config.port, protocol);
}

// 获取当前使用的IP地址
function getCurrentIP() {
  const config = getCurrentConfig();

  // 检查是否在微信小程序环境中
  if (typeof wx !== "undefined" && wx.getDeviceInfo) {
    try {
      const deviceInfo = wx.getDeviceInfo();
      if (deviceInfo.platform === "devtools") {
        return (
          config.hosts.find((host) => host === "127.0.0.1") || config.hosts[0]
        );
      } else {
        return config.hosts[0];
      }
    } catch (e) {
      return config.hosts[0];
    }
  } else {
    return config.hosts[0];
  }
}

// 获取所有可用的IP地址（用于IP检测）
function getAvailableIPs() {
  const config = getCurrentConfig();
  return config.hosts;
}

// 导出配置
module.exports = {
  // 基础配置
  getCurrentEnv,
  getCurrentConfig,
  getCurrentIP,
  getAvailableIPs,

  // URL构建
  getAPIBaseURL,
  getImageServerURL,
  getWebSocketURL,
  buildBaseURL,

  // 环境判断
  isDevelopment: () => getCurrentEnv() === "development",
  isProduction: () => getCurrentEnv() === "production",

  // 服务器配置
  serverConfig,
};
